﻿using System;
using System.Collections.Generic;
using Citas.Dominio;

namespace Citas.Negocio
{
    public interface IAdministracionService
    {

        //Especialidad_____________________________________
        #region Operaciones de negocio Especialidad
        Especialidad RegistrarEspecialidad(String descripcion);
        void EliminarEspecialidad(Int32 codigoEspecialidad);
        #endregion

        #region Métodos de soporte para entidad Especialidad
        Especialidad CrearEspecialidad(Especialidad especialidadACrear);
        Especialidad ObtenerEspecialidad(Int32 codigo);
        Especialidad ModificarEspecialidad(Especialidad especialidadAModificar);
        ICollection<Especialidad> ListarEspecialidades();
        ICollection<Especialidad> ListarEspecialidadPorDescripcion(String descripcion);
        #endregion

        
        //Medico___________________________________
        #region Operaciones de negocio Medico
        Medico RegistrarMedico(String nombreMedico);
        #endregion

        #region Métodos de soporte para entidad Medico
        Medico ObtenerMedico(Int32 codigo);
        Medico ObtenerXNombre(String nombre);
        Medico ModificarMedico(Medico medicoAModificar);
        void EliminarMedico(Medico medicoAEliminar);
        ICollection<Medico> ListarMedicos();
        ICollection<Medico> ListarMedicosXNombre(String nombre);
        #endregion

        //Usuario___________________________________
        #region Operaciones de negocio Usuario
        Usuario RegistrarUsuario(String usuario, String clave, String nombre, String perfil);
        #endregion

        #region Métodos de soporte para entidad Usuario
        Usuario ObtenerUsuario(Int32 codigo);
        Usuario ObtenerUsuarioXNombreUsuario(String usuario);
        Usuario ModificarUsuario(Usuario usuarioAModificar);
        void EliminarUsuario(Usuario usuarioAEliminar);
        ICollection<Usuario> ListarUsuarios();
        ICollection<Usuario> ListarUsuariosXNombre(String nombre);
        #endregion

        //Paciente______________________________
        #region Operaciones de negocio para Paciente

        Paciente RegistrarPaciente(String tipoDocumento, String numeroDocumento, String apellidoPaterno, String apellidoMaterno, String nombres, String codigoSeguro);
        Paciente ModificarPaciente(Int32 codigoPaciente, String tipoDocumento, String numeroDocumento, String apellidoPaterno, String apellidoMaterno, String nombres, String codigoSeguro);
        void EliminarPaciente(Int32 codigoPaciente);

        #endregion

        #region Métodos de soporte para entidad Paciente
        Paciente ObtenerPaciente(Int32 codigoPaciente);
        Paciente ObtenerPacienteXDoc(String numeroDocumento);
        ICollection<Paciente> ListarPaciente();
        ICollection<Paciente> ListarPacienteXDocumento(String documento);
        ICollection<Paciente> ListarPacienteXNombre(String nombre);
        #endregion

        //Cita_______________________________________________________________________________
        #region Operaciones de negocio cita
        Cita RegistrarCita(DateTime fechaHora, Int32 codigoPaciente, Int32 codigoMedicoEspecialidad, 
                                    String numeroConsultorio, Double precio, String estado);

        Cita ModificarCita(Int32 numeroCita, DateTime fechaHora, Int32 codigoPaciente, Int32 codigoMedicoEspecialidad,
                                    String numeroConsultorio, Double precio, String estado);
        #endregion

        #region Métodos de soporte para entidad cita
        Cita ObtenerCita(Int32 codigo);
        void EliminarCita(Cita citaAEliminar);
        ICollection<Cita> ListarCitas();
        ICollection<Cita> ListarCitasXNumero(Int32 numero);
        ICollection<Cita> ListarCitasXPaciente(String paciente);
        ICollection<Cita> ListarCitaXNumeroODocumento(Int32 numero, String documento);
        #endregion

        //MedicoEspecialidad___________________________________
        #region Operaciones de negocio para MedicoEspecialidad
        MedicoEspecialidad AgregarMedicoEspecialidad(Int32 codigoMedico, Int32 codigoEspecialidad);        
        #endregion

        #region Métodos de soporte para entidad MedicoEspecialidad
        MedicoEspecialidad ObtenerMedicoEspecialidad(Int32 codigo);
        MedicoEspecialidad ObtenerXMedicoYEspecialidad(Int32 codigoMedico, Int32 codigoEspecialidad);
        MedicoEspecialidad ModificarMedicoEspecialidad(MedicoEspecialidad medicoEspecialidadAModificar);
        void EliminarMedicoEspecialidad(MedicoEspecialidad medicoEspecialidadAModificar);
        ICollection<MedicoEspecialidad> ListarMedicoEspecialidad();
        ICollection<MedicoEspecialidad> ListarMedicosXEspecialidad(Int32 codigoEspecialidad);
        #endregion

        //AtencionMedica_______________________________________________________________________________
        #region Operaciones de negocio AtencionMedica
        AtencionMedica RegistrarAtencionMedica(Int32 numeroCita, String diagnostico);

        AtencionMedica ModificarAtencionMedica(Int32 codigoAtencion, Int32 numeroCita, String diagnostico);
        #endregion

        #region Métodos de soporte para entidad AtencionMedica
        AtencionMedica ObtenerAtencionMedica(Int32 codigo);
        void EliminarAtencionMedica(AtencionMedica atencionAEliminar);
        ICollection<AtencionMedica> ListarAtencionMedica();
        #endregion

        //Receta_______________________________________________________________________________
        #region Operaciones de negocio Receta
        Receta RegistrarReceta(Int32 codigoAtencion, String medicamento, String indicaciones);

        Receta ModificarReceta(Int32 codigoReceta, Int32 codigoAtencion, String medicamento, String indicaciones);
        #endregion

        #region Métodos de soporte para entidad Receta
        Receta ObtenerReceta(Int32 codigo);
        void EliminarReceta(Receta recetaAEliminar);
        ICollection<Receta> ListarReceta();
        ICollection<Receta> ListarRecetaPorAtencion(Int32 codigoAtencion);
        #endregion
        



    }
}
